import axios from "axios";
import { Message } from "element-ui";
import  moment from "moment";
import store from '@/store'
// 封装一个axios实例
const http = axios.create({
    // 通用请求的地址前缀
    baseURL: process.env.VUE_APP_API_URL,
    // 超时时间
    timeout: 100000
})
// zjheg 
http.adornData = function (params,is)
{
  return params;
};

// 工具函数：生成完整的 URL 地址
http.adornUrl = function (url) {

  // 如果传入的 url 已经是完整路径（以 http 或 https 开头），直接返回
  if (/^(http|https):\/\//.test(url)) {
      return url;
  }
  // 否则，拼接 baseURL 和传入的相对路径
  return `${url}`;
};


// / 工具函数：格式化请求参数 
http.adornParams = function (params) {
    return params;
};

// 请求拦截器
http.interceptors.request.use(  (config)=> {


    // 在这个地方去判断这个用户是否已经认证认证成功之后需要设置这个请求头当中过去这个token
    if (!store.getters.isAuthenticated&&!config.url.includes('login')&&!config.url.includes('verify')) {
        throw  '用户没有进行认证认证之后进行这个发送请求'
    }else {
        config.headers.Authorization = store.getters.getToken
    }

    // 格式化日期的函数
    const formatDateFields = (obj) => {
        if (!obj || typeof obj !== 'object') return obj;

        Object.keys(obj).forEach((key) => {
            // 匹配字段名（如 createTime、updateTime、startAt、endDate 等）
            if (/(Time|At|Date|Dt|Timestamp)$/i.test(key) && obj[key]) {
                try {
                    obj[key] = moment(obj[key]).format('YYYY-MM-DD HH:mm:ss');
                } catch (e) {
                    console.warn(`Failed to format date field ${key}:`, obj[key]);
                }
            }
        });
        return obj;
    };

    // 处理 GET 请求的 params
    if (config.params) {
        config.params = formatDateFields(config.params);
    }

    // 处理 POST/PUT 请求的 data（兼容对象和 JSON 字符串）
    if (config.data) {
        if (typeof config.data === 'object') {
            config.data = formatDateFields(config.data);
        } else if (typeof config.data === 'string') {
            try {
                const parsedData = JSON.parse(config.data);
                config.data = JSON.stringify(formatDateFields(parsedData));
            } catch (e) {
                // 非 JSON 字符串不处理
            }
        }
    }

    const  urlal =['/user/update']
    if (config.url == '/user/save'||urlal.includes(config.url)) {
        config.baseURL = process.env.VUE_PROXY_PAYMENTS_USER ? process.env.VUE_PROXY_PAYMENTS_USER : 'http://localhost:8007/keyou/system/sysuser';
        if (config.url.includes('save')) {
            config.url ='/save'
        }else{
            config.url ='/update';
        }
    }
    let url = config.url;
// alert(url)
    if (config.url.includes('/order/orderinfo/list')||url.includes("order/orderinfo")||url.includes("order/orderbil")||url.includes("order/orderprofitsharing")) {
        config.baseURL = 'http://localhost:8005/keyou'
    }

     if (url.includes("generator/couponinfo")||url.includes("generator/customercoupon")) {
        config.baseURL = 'http://localhost:8002/keyou'
    }

     if (url.includes("generator/cancelrule")||url.includes("generator/feerule")||url.includes("generator/profitsharing")||url.includes("generator/reward"))
    {
        if (url.includes("generator/profitsharing")&&!url.includes("generator/profitsharingrule"))
        {
             config.url = config.url.replace("profitsharing","profitsharingrule");
        }
          if (url.includes("generator/reward")&&!url.includes("generator/rewardrule"))
        {
            config.url = config.url.replace("reward","rewardrule");
        }
        config.baseURL = 'http://localhost:8006/keyou'
    }
    if (url.includes("system"))
    {

        config.baseURL = 'http://localhost:8007/keyou'
    }
    if (url.includes('/mweather'))
    {
        // alert('下载')
        config.baseURL = '/weather'
    }
    // console.log(config.url);
    // console.log(config.baseURL)
    return config;
}, function (error) {
    // 对请求错误做什么
    // alert("这里先出现问题")
    return Promise.reject(error);
})

// 添加响应拦截器
http.interceptors.response.use(function (response) {
  console.log(response+"这个是res");
  // alert(response.data.code)
  // if (response.data.code===500) {
  //     Message.error(response.data.msg)
  // }
    
    // 对响应数据做什么
    return response;
}, function (error) {
  // console.log("打印这个相应的内容",error)
  //   console.log(error)
   let url   =  error.config.url;
  // //  在这个地方进行这个判断这个地址如果是这个save保存的情况就直接进行这个返回 这个结果、
  // console.log(url);
  // / 判断 url 是否包含 "save"
  if (url.includes('save')) {
   Message.error("保存这个数据失败")
    return  Promise.reject(error); // 返回自定义结果
  }
    // 在这个地方进行这个查询这个
     if (error.response) {
        const code = error.response.status;
  
        // 针对不同的状态码给出提示
        switch (code) {
          case 400:
            Message.error('请求参数错误，请检查后重试！');
            break;
          case 401:
            Message.error('未授权，请登录后重试！');
            break;
          case 403:
            Message.error('禁止访问，您没有权限执行该操作！');
            break;
          case 404:
              console.log('登录成功');
            break;
          case 500:
            Message.error('服务器内部错误，请稍后再试！');
            break;
          case 502:
              console.log('网关错误，请稍后再试！');
            break;
          case 503:
            Message.error('服务不可用，请稍后再试！');
            break;
          case 504:
            Message.error('网关超时，请稍后再试！');
            break;
          default:
            Message.error(`未知错误：${code}`);
        }
      } else if (error.request) {
        // 请求已发出，但没有收到响应
        Message.error('请求超时或服务器未响应，请检查网络连接！');
      } else {
        // 其他错误
        Message.error('请求发生错误，请稍后再试！');
      }
      return Promise.reject(error);
})

export default http